/**
 * 
 */
package projectg06.subterraneos;

import static java.lang.System.out;

/**
 * @author David
 * 
 */
public class ArcoGrafo implements Comparable<Object> {

	protected final int claveOrigen;
	protected final int claveDestino;
	protected double peso;

	public ArcoGrafo(int origen, int destino, double peso) {
		if (origen >= 0 && destino >= 0) {
			this.claveOrigen = origen;
			this.claveDestino = destino;
			this.peso = peso;
		} else
			throw new RuntimeException("No se pudo crear el arco de " + origen
					+ " a " + destino);

	}

	public ArcoGrafo(int origen, int destino) {
		this(origen, destino, 0);
	}

	/**
	 * @return the peso
	 */
	public double getPeso() {
		return peso;
	}

	/**
	 * @param peso
	 *            the peso to set
	 */
	public void setPeso(double peso) {
		if (peso >= 0)
			this.peso = peso;
	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see java.lang.Object#hashCode()
	 */
	@Override
	public int hashCode() {
		final int prime = 31;
		int result = 1;
		result = prime * result + claveDestino;
		result = prime * result + claveOrigen;
		long temp;
		temp = Double.doubleToLongBits(peso);
		result = prime * result + (int) (temp ^ (temp >>> 32));
		return result;
	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see java.lang.Object#equals(java.lang.Object)
	 */
	@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (!(obj instanceof ArcoGrafo))
			return false;
		ArcoGrafo other = (ArcoGrafo) obj;

		if (claveOrigen == other.claveDestino
				&& claveDestino == other.claveOrigen && peso == other.peso)
			return true;

		if (claveDestino != other.claveDestino)
			return false;
		if (claveOrigen != other.claveOrigen)
			return false;

		if (Double.doubleToLongBits(peso) != Double
				.doubleToLongBits(other.peso))
			return false;

		return true;
	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see java.lang.Object#toString()
	 */
	@Override
	public String toString() {
		return "Arco [Origen: " + claveOrigen + ", Destino: " + claveDestino
				+ ", Peso: " + peso + "]";
	}

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		ArcoGrafo a = new ArcoGrafo(3, 2);
		ArcoGrafo b = new ArcoGrafo(1, 3, 14.3);

		out.println(a);
		out.println(b);

		@SuppressWarnings("unused")
		ArcoGrafo c = new ArcoGrafo(-1, 4, 34.54);

	}

	@Override
	public int compareTo(Object arg0) {
		// TODO Auto-generated method stub
		double res = (this.peso - ((ArcoGrafo) arg0).peso);

		return res == 0 ? 0 : res > 0 ? 1 : -1;
	}

}
